package com.tomdd.config;

import com.tomdd.utils.MinIOUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <pre>
 *  <p>
 *  <h3>MinIO中的Bucket、Object</h3>
 *  <ul>
 *      <li>Bucket 是存储Object的逻辑空间，每个Bucket之间的数据是相互隔离的，对用户而言，相当于存放文件的顶层文件夹</li>
 *      <li>Object 是存储到MinIO的基本对象，对用户而言，相当于文件</li>
 *  </ul>
 *  </p>
 *  <p>
 *   <h3>MinioClient的常用API</h3>
 *   <ul>
 *       <li>bucketExists():用于检查指定的存储桶是否存在，返回布尔值，表示存储桶是否存在</li>
 *       <li>makeBucket():用于创建一个新的存储桶（bucket），需要指定存储桶的名称</li>
 *       <li>listBuckets():用于列出用户有权访问的所有存储桶，返回存储桶的列表</li>
 *       <li>removeBucket():用于删除一个已存在的存储桶（bucket），删除失败会抛出异常</li>
 *       <li>putObject()：用于上传文件到指定的存储桶</li>
 *       <li>statObject()：用于检查指定的对象（文件）的状态</li>
 *       <li>getPresignedObjectUrl()：用于生成一个对象（文件）的签名URL，以便可以通过HTTP访问</li>
 *       <li>listObjects()：用于列出指定存储桶中的所有对象（文件）</li>
 *       <li>removeObject()：用于删除指定存储桶中的对象，需要指定存储桶名称和对象键；</li>
 *   </ul>
 *  </p>
 *
 *
 *
 * </pre>
 * @author zx
 * @date 2024年12月10日 13:48
 */
@Configuration
public class MinioConfig {
    private static final String MINIO_URL = "http://43.139.145.106:19000";
    private static final String ACCESS_KEY = "minioadmin";
    private static final String SECRET_KEY = "minioadmin";

    //@Bean
    //public MinioClient minioClient() {
    //    //链式编程，构建MinioClient对象
    //    return MinioClient.builder()
    //            .endpoint(MINIO_URL)
    //            .credentials(ACCESS_KEY, SECRET_KEY)
    //            .build();
    //}


    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.fileHost}")
    private String fileHost;
    @Value("${minio.bucketName}")
    private String bucketName;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;

    @Value("${minio.imgSize}")
    private Integer imgSize;
    @Value("${minio.fileSize}")
    private Integer fileSize;

    @Bean
    public MinIOUtils creatMinioClient() {
        return new MinIOUtils(endpoint, bucketName, accessKey, secretKey, imgSize, fileSize);
    }

}
